package com.yuexunit.account.action.v2;

import java.util.List;

import com.yuexunit.account.action.v2.model.Operation;
import com.yuexunit.account.action.v2.model.Role;
import com.yuexunit.account.context.Version2_1;
import com.yuexunit.page.PageCriteria;
import com.yuexunit.page.PageList;
import com.yuexunit.web.annotation.Action;
import com.yuexunit.web.annotation.Parameter;


/**
 * @author wangjinshui
 */
public interface AuthorizationActionApi {
	/**
	 * @param appKey 应用代码
	 * @param accountId 帐号ID（可为null）
	 * @return 帐号的角色列表
	 */
	@Action(version=Version2_1.class, description="查询角色列表")
	public List<Role> inquireRoleList(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="accountId", description="帐号ID") Long accountId);
	
	
	@Action(version=Version2_1.class, description="查询角色分页列表")
	public PageList<Role> inquireRolePageList(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="accountId", description="帐号ID") Long accountId,
			@Parameter(name="pageCriteria", description="分页信息") PageCriteria pageCriteria);
	
	/**
	 * 根据ID查询角色详情
	 * @param roleId 角色ID
	 * @return 角色详情
	 */
	@Action(version=Version2_1.class, description="查询角色详情")
    public Role inquireRole(
    		@Parameter(name="roleId", description="角色ID") Long roleId);
    
    
    /**
	 * 修改帐号所属的角色
	 * @param appKey 应用UUID
	 * @param accountId 帐号ID
	 * @param roleIdList 角色列表
	 */
	@Action(version=Version2_1.class, description="修改帐号的角色")
	public void updateAccountRoles(
			@Parameter(name="appKey", description="应用代码") String appKey, 
			@Parameter(name="accountId", description="帐号ID") Long accountId,
			@Parameter(name="roleIdList", description="角色ID列表") List<Long> roleIdList);
	

	/**
	 * @param appKey 应用UUID
	 * @param accountId 帐号ID（可为null）
	 * @return 帐号在应用中的权限列表
	 */
	@Action(version=Version2_1.class, description="查询帐号的权限代码列表")
	@Parameter(name="operationCodeList", description="权限代码列表")
	public List<String> inquireOperationListOfAccount(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="accountId", description="帐号ID") Long accountId);
	
	
	/**
	 * 创建角色
	 * @param appKey 应用UUID
	 * @param roleName 角色名称
	 * @return 角色ID
	 */
	@Action(version=Version2_1.class, description="创建角色")
	@Parameter(name="roleId", description="角色ID")
	public Long createRole(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="roleName", description="角色名称") String roleName);
	
	
	/**
	 * 修改角色名称
	 * @param appKey 应用UUID
	 * @param roleId 角色ID
	 * @param roleName 角色名称
	 */
	@Action(version=Version2_1.class, description="修改角色名称")
	public void updateRole(
			@Parameter(name="appKey", description="应用代码") String appKey, 
			@Parameter(name="roleId", description="角色ID") Long roleId,
			@Parameter(name="roleName", description="角色名称") String roleName);
	
	
	/**
	 * 删除角色
	 * @param appKey 应用UUID
	 * @param roleId 角色ID
	 */
	@Action(version=Version2_1.class, description="删除角色")
	public void deleteRole(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="roleId", description="角色ID") Long roleId);
	
	
	/**
	 * @param appKey 应用UUID
	 * @param roleId 角色ID
	 * @return 角色的权限列表
	 */
	@Action(version=Version2_1.class, description="查询权限列表")
	public List<Operation> inquireOperationList(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="roleId", description="角色ID") Long roleId);
	
	
	/**
	 * 修改角色的权限列表
	 * @param appKey 应用UUID
	 * @param roleId 角色ID
	 * @param operationCodeList 权限代码列表
	 */
	@Action(version=Version2_1.class, description="修改角色的权限")
	public void updateRoleOperations(
			@Parameter(name="appKey", description="应用代码") String appKey,
			@Parameter(name="roleId", description="角色ID") Long roleId,
			@Parameter(name="operationCodeList", description="权限代码列表") List<String> operationCodeList);
}
